This invention relates to processing requests in virtual computing environments.
Computing environments for enterprises (e.g., companies or other organizations) often include a number of separate server computers together hosting a variety of different server applications and often incorporating a number of different hardware architectures, operating systems, storage systems, etc. Each server computer may include one or more processors, volatile and non-volatile memory, and a network interface, for example, to enable the servers to collaborate using a local area network (LAN). Server applications, in general, are programs designed to process client requests, often at a high rate. The overall processing in such an environment is often spread across a variety of server applications running on a network of server computers. In addition, such environments often have strict standards for availability and reliability, for example, because of the business consequences of failures or other lack of availability. The term “enterprise computing” has been generally applied to such computing environments, and in the context of the description below, the term should be understood broadly as a computing system that may, but not necessarily, have one or more of the characteristics outlined above.
One trend in enterprise computing is the bifurcation of servers into computers dedicated to hosting server applications and computers or special-purpose networked devices dedicated to hosting data, linked by one or more data networks. The latter set forms an enterprise data storage system. A network of server computers backed by an enterprise data storage system may be readily extensible. Additional computer servers can be connected to the network and use data exposed by the storage system. Redundant servers can share access to storage and process client requests collaboratively, spreading the workload.
An enterprise data storage system is often built using a combination of data storage technologies. For example, server computers and dedicated devices can provide file storage services to host file systems that are accessed over a local area network (LAN), for example, according to Internet Protocol (IP) communication using protocols such as NFS (Network File System), and CIFS (Common Internet File System). Such computers or devices are often referred to as Network Attached Storage (NAS). Server computers may also access dedicated data storage devices over a storage area network (SAN), which in general includes a high-speed special-purpose data network that can be used to interconnect different kinds of data storage devices with associated server computers. For example, a SAN may use Fibre Channel or high-speed Ethernet based communication and protocols such as SCSI (Small Computer System Interface) over Fibre Channel or iSCSI (Internet SCSI) over Ethernet. One or more storage devices on a SAN can be viewed as a single storage resource and striped or partitioned into logical units each identified by a logical unit number (LUN). Within the storage device, a single LUN can be associated with a portion of a disk drive, an entire drive, portions of several drives, or any other combination of drive space. Some storage devices, which are often referred to as “intelligent storage devices,” provide additional capabilities or built-in tools, for example, a capability to make snapshots or backups of the state of their data.
Maintaining an enterprise computing environment can be complicated. Often an environment hosts some combination of server applications, which may each be developed within the enterprise or by a third-party, for example Microsoft. Server applications may interact and, when not functioning correctly, may negatively interfere with each other. Every time a new application is introduced, instability may be introduced. Changing from one version of a server application to another version of the same application can have unintended and unanticipated consequences. Even the impact of changing a configuration setting may be dire. The nature of an enterprise-class environment restricts the amount of time a system can be down, even for maintenance.
One approach to maintenance of an enterprise computing environment uses two sets of server computers. A first set of servers forms a primary production environment that is used to perform the required tasks of the environment, for example, providing services to client computers, processing transactions, etc. A second set of servers forms an isolated duplicate test environment. Certain maintenance tasks then involve duplication of some or all aspects of the production environment to serve as a test environment, isolated from the production environment. The data in the test environment can be seeded by copying the data present in the production environment, for example, based on a backup or snapshot of the data stored in the production storage system.
The use of a duplicate test environment can allow a system administrator to make modifications without affecting the production environment. The administrator is free to experiment with new applications, new versions, and new configurations. Once the system administrator fully understands the impact of a modification, and how to make the modification efficiently, the administrator can then bring the production environment into a maintenance window and make the change.
Use of a duplicate environment generally requires the enterprise to acquire twice the hardware and requires the system administrator to do tasks twice, once in the test environment and again in the production environment. Keeping the production and test environments synchronized can be complicated and error-prone. When the administrator does modify the production environment, care must be taken to make exactly the same change that was tested. Otherwise the system administrator may inadvertently introduce a bug.